package com.cy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/*	SpringBoot项目启动分析，启动入口
* @SpingBootApplication注解描述springboot项目启动类，此springboot的
入口对象，可以通过这个入口来启动springboot项目，这个入口类有什么特点吗？

2）这个类包含有一个main方法，在此方法中来完成springboot项目的初始化（请问初始化时springboot底层都会做什么？）。
* FAQ:请问初始化springboot底层都会做什么？
*
1）加载类（通过类加载器（ClassLoader）将指定位置的类读到内存存储起来->底层通过线程调用io从磁盘读取到内存）
2）对类进行分析（创建字节码对象-Class类型，通过反射获取配置信息，
* 这个类有注解，这个类所在包下面有其他类，这个类有特定注解描述）
3）对于指定配置（例如有spring特定注解描述的类）的对象存储器其配置信息（借助BeanDefinition对象存储）
4）基于对象中BeanDefintion对象中class的配置构建类的实例（bean对象），并进行bean对象的管理
*
*思考：浏览器中输入一个url（例如http：//www.baidu.com）然后回车，底层会做点什么？
*
*1）将url发送给域名服务器（DNS），通过DNS解析域名获取一个IP地址（IP地址是网络计算机唯一标识）
*2）通过IP地址找到网络中的计算机服务器，再通过端口号定位到具体的Web服务器（例如Tomcat）？（端口号是
* 计算机应用程序中的唯一标识1234）
* 3）Web服务器可以通过线程调用io读取网络中http协议中的数据，并对数据进行解析，然后封装到Requst对象。
* 4）web服务器调用JAVAEE规范中的对象（Filter，Servlet）处理请求，请求处理结束在响应一个结果传递到客户端
*  */

/*	springboot项目启动过程分析
需要有注解来描述的类，当系统启动时首先把类读到内存里面，从哪个位置去读这个类？Scan Class：从指定包下面扫描
一些类,这个包是从什么包？在启动类所在包或子包中扫描，扫描的这个类要从磁盘中读到内存里去（ 通过Thread调用IO把Disk的类读到内存里面）要把类的配置信息存起来，由特定注解描述的类才交给
spring，扫描到有注解信息的类才把配置信息存起来（存到beanDefiniton对象里面（当然这是个接口有具体实现类）多个
class配置信息要存储到map容器中专门存储bean的配置信息）），当我们把这个bean的配置信息存储好了以后，bean
要交给sping来管理的，spring要通过一个工厂来创建一个class的实例，创建完这个实例后要把这个实例存起来，存到
一个map容器里面（基于前一个容器原材料构建出来的实例存储到仓库创建好的成品），用bena对象管理这个bean pool在
外界得到重用，对象创建出来从池中取快还是再创建一个。

在sping容器中找不到对应的Bean信息？
1）检查此类所在包（要在启动类所在包或子包中）
2）检查此类是否有Spring框架指定注解描述
*  */
@SpringBootApplication
public class Application {//Main Thread 所有的工作都运行在通过进程拿到线程执行任务，CPU调用线程

    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);
    }

}
